/*
 * Programacao concorrente
 * Grupo-03a
 * Brenno Candido					7696500 
 * Jose Victor Uliana Martins		7656620
 * Maria Fernanda Garbim Avelino 	7277562
 */

#include <stdio.h> // printf
#include <time.h> // time
#include <limits.h> // UINT_MAX -- maior inteiro sem sinal
#include "rand.c" // next() -- calcula numeros randomicos

/** Numeros de iteracoes **/
#define N 1000000000

// variavel global que tera o numero
// de pontos que estao centro da circunferencia
unsigned int pts_in;

/*
 * Função que realiza o metodo de Monte carlos
 */
void monte_carlo() {
    unsigned int i;
    double x, y;
   
    double rand = time(NULL); // inicia a semente dos numeros randomicos
    for(i=0; i<N; i++) {
		// gera as coordenadas (x,y) entre 0 e 1
        rand = next(rand);
        x = rand/UINT_MAX;
        rand = next(rand);
        y = rand/UINT_MAX;
		/* Se coordenada (x,y) esta dentro da cinrcunferencia */
        if(x*x + y*y <= 1) {
             pts_in++;
        }
    }
}


int main() {
    int i, n;

    pts_in = 0;
	
	monte_carlo();

	// calculo do pi
    double pi = 4.0*pts_in/N;
    printf("%.6lf\n", pi);

    return 0;
}
